
/*
"万科易选房小程序"  "我的 - 积分商城"自动签到，支持 Quantumult X（理论上也支持 Surge、Loon，未尝试）。
请先使用 wanke_cookie.js 获取 Token。(https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke_cookie.js)
若弹出"wanke分享家签到 - 获取Cookie： 成功"，则代表Cookie信息获取成功，可以配置Cron来使用自动签到脚本，其他提示或无提示请发送日志信息至 issue。

️免责声明：
1. 此脚本仅用于学习研究，不保证其合法性、准确性、有效性，请根据情况自行判断，本人对此不承担任何保证责任。
2. 由于此脚本仅用于学习研究，您必须在下载后 24 小时内将所有内容从您的计算机或手机或任何存储设备中完全删除，若违反规定引起任何事件本人对此均不负责。
3. 请勿将此脚本用于任何商业或非法目的，若违反规定请自行对此负责。
4. 此脚本涉及应用与本人无关，本人对因此引起的任何隐私泄漏或其他后果不承担任何责任。
5. 本人对任何脚本引发的问题概不负责，包括但不限于由脚本错误引起的任何损失和损害。
6. 如果任何单位或个人认为此脚本可能涉嫌侵犯其权利，应及时通知并提供身份证明，所有权证明，我们将在收到认证文件确认后删除此脚本。
7. 所有直接或间接使用、查看此脚本的人均应该仔细阅读此声明。本人保留随时更改或补充此声明的权利。一旦您使用或复制了此脚本，即视为您已接受此免责声明。

Author：Julian

/*
    QX:
    [rewrite_local]
    #万科分享家签到
    https:\/\/zhikebiz.vanke.com\/api\/shop\/points* url script-request-header https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke_cookie.js
    https:\/\/zhikebiz\.vanke\.com\/api\/cloud\/component\/login\/appletLogin url script-request-header https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke_cookie.js
    https:\/\/zhikebiz\.vanke\.com\/api\/cloud\/component\/login\/appletLogin url script-response-body https://gitee.com/jianglan/node-scripts/raw/master/checkin/wanke_cookie.js
    [MITM]
    hostname:zhikebiz.vanke.com
*/

const cookieName = 'wanke分享家签到'
const signurlKey = 'julian_signurl_wanke'
const signheaderKey = 'julian_signheader_wanke'
const signTokenKey = 'julian_signToken_wanke'
const signUserInfoKey = 'julian_UserInfo_wanke'

const julian = init()

const reqURL = $request.url
if($response && reqURL.indexOf('login/appletLogin')>-1)
{
  var body = JSON.parse($response.body);
  const signTokenVal = body.data.accessToken;
  julian.log(`signTokenVal:${signTokenVal}`);
  if (signTokenVal) 
  {
      julian.setdata(signTokenVal, signTokenKey)
  }
}
else if($request && $request.method != 'OPTIONS' && reqURL.indexOf('login/appletLogin')>-1)
{
  const signUserInfoVal = $request.headers.UserAccessInfo;
  julian.log(`signUserInfoVal:${signUserInfoVal}`);
  if (signUserInfoVal) 
  {
      julian.setdata(signUserInfoVal, signUserInfoKey)
  }
}
else if($request && $request.method != 'OPTIONS' && reqURL.indexOf('shop/points')>-1) 
{
  const userInfoVal = julian.getdata(signUserInfoKey)
  const tokenVal = julian.getdata(signTokenKey)
  if(userInfoVal && tokenVal)
  {
    const signurlVal = reqURL
    const headers = {
      'Host' : `zhikebiz.vanke.com`,
      'Content-Type' : `application/json`,
      'Accept-Encoding' : `gzip, deflate, br`,
      'UserAccessInfo' : userInfoVal,
      'Connection' : `keep-alive`,
      'env' : $request.headers.env,
      'Accept' : `*/*`,
      'User-Agent' : `Mozilla/5.0 (iPhone; CPU iPhone OS 14_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.2(0x1800022e) NetType/WIFI Language/zh_CN`,
      'Authorization' : tokenVal,
      'Referer' : `https://servicewechat.com/wxe9692d75c9e71da7/533/page-frame.html`,
      'Accept-Language' : `zh-cn`
      };
    const signheaderVal = JSON.stringify(headers)
  
    julian.log(`signurlVal:${signurlVal}`)
    julian.log(`signheaderVal:${signheaderVal}`)
    //保存缓存数据到Qx的Env
    if (signurlVal) 
    {
        julian.setdata(signurlVal, signurlKey)
    }
    if (signheaderVal) 
    {
        julian.setdata(signheaderVal, signheaderKey)
    }
    julian.msg(cookieName, '获取Cookie: 成功', '')
  }
  else
  {
    julian.msg(cookieName, '获取Cookie：失败', '请刷新并重新加载小程序')
  }
}

function init() {
  isSurge = () => {
    return undefined === this.$httpClient ? false : true
  }
  isQuanX = () => {
    return undefined === this.$task ? false : true
  }
  getdata = (key) => {
    if (isSurge()) return $persistentStore.read(key)
    if (isQuanX()) return $prefs.valueForKey(key)
  }
  setdata = (key, val) => {
    if (isSurge()) return $persistentStore.write(key, val)
    if (isQuanX()) return $prefs.setValueForKey(key, val)
  }
  msg = (title, subtitle, body) => {
    if (isSurge()) $notification.post(title, subtitle, body)
    if (isQuanX()) $notify(title, subtitle, body)
  }
  log = (message) => console.log(message)
  get = (url, cb) => {
    if (isSurge()) {
      $httpClient.get(url, cb)
    }
    if (isQuanX()) {
      url.method = 'GET'
      $task.fetch(url).then((resp) => cb(null, {}, resp.body))
    }
  }
  post = (url, cb) => {
    if (isSurge()) {
      $httpClient.post(url, cb)
    }
    if (isQuanX()) {
      url.method = 'POST'
      $task.fetch(url).then((resp) => cb(null, {}, resp.body))
    }
  }
  done = (value = {}) => {
    $done(value)
  }
  return { isSurge, isQuanX, msg, log, getdata, setdata, get, post, done }
}
julian.done()